package com.listsorter;

import java.util.Collections;
import java.util.List;
import java.util.Locale;

/**
 * 
 * @author tamerhur
 * 
 */
public final class SortUtil
{

   public static <T> List<T> sort(List<T> sortableArray)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0)));
         return sortableArray;

      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, Locale locale)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), locale));
         return sortableArray;

      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, OrderType sortType)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), sortType));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, OrderType sortType, Locale locale)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), sortType, locale));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, String[] customMethodName)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), customMethodName));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, String[] customMethodName, Locale locale)
   {

      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), customMethodName, locale));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, String customMethodPath[], OrderType sortType)
   {
      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), customMethodPath, sortType));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

   public static <T> List<T> sort(List<T> sortableArray, String customMethodPath[], OrderType sortType, Locale locale)
   {
      if (sortableArray != null && sortableArray.size() > 0)
      {
         Collections.sort(sortableArray, new ListSorter<T>(sortableArray.get(0), customMethodPath, sortType, locale));
         return sortableArray;
      }
      else
      {

         return sortableArray;

      }

   }

}
